package Leetcode第一期;

/**
 * 在一个 n * m 的二维数组中，每一行都按照从左到右递增的顺序排序，每一列都按照从上到下递增的顺序排序。请完成一个函数，输入这样的一个二维数组和一个整数，判断数组中是否含有该整数。dd
 * 示例:
 *
 * 现有矩阵 matrix 如下：
 *
 * [
 *   [1,   4,  7, 11, 15],
 *   [2,   5,  8, 12, 19],
 *   [3,   6,  9, 16, 22],
 *   [10, 13, 14, 17, 24],
 *   [18, 21, 23, 26, 30]
 * ]
 * 给定 target = 5，返回 true。
 *
 * 给定 target = 20，返回 false。
 */
public class 二维数组中的查找_4 {
   /* public boolean findNumberIn2DArray(int[][] matrix, int target) {
        if(matrix==null||matrix.length==0||matrix[0].length==0){
            return false;
        }
        for(int i=0;i<matrix.length;i++){
            if(matrix[i][0]>target){
                return false;
            }
            if(Arrays.binarySearch(matrix[i],target)>=0){
                return true;
            }
        }
        return false;
    }*/

    public boolean searchMatrix(int[][] matrix, int target) {
        if (matrix.length == 0 || matrix[0].length == 0) {
            return false;
        }
        int row = 0;
        int col = matrix[0].length - 1;
        while (row < matrix.length && col >= 0) {
            if (target > matrix[row][col]) {
                row++;
            } else if (target < matrix[row][col]) {
                col--;
            } else {
                return true;
            }
        }
        return false;
    }

    //错误答案
  /*  public boolean searchMatrixB(int[][] matrix, int target) {
        if (matrix==null || matrix.length==0) {return false;}

        int left=0;
        int right=matrix.length * matrix[0].length-1; //将行列式转换成一行
        int col=matrix[0].length; //列数

        while (left<=right){
            int mid=(left+right)/2;
            int value=matrix[mid/col][mid%col];
            if (target==value){
                return true;
            }else if (target < value){
                right=mid-1;
            }else if (target>value){
                left=mid+1;
            }
        }
        return false;

    }*/



}
